package com.liouxb.data.structure.queue;

/**
 * 队列
 *
 * @author liouwb
 */
public class QueueDemo {
    public static void main(String[] args) {

    }
}

/**
 * 使用数组实现队列
 */
class ArrayQueue {
    // 队列(集合)的最大长度
    private int maxSize;

    // 队列头
    private int front;

    // 队列尾
    private int rear;

    // 数据集合
    private int[] arrQueue;

    /**
     * 构造函数
     */
    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        this.arrQueue = new int[maxSize];
        // 指向队列头数据的前一个位置
        this.front = -1;
        // 最后一个数据的位置
        this.rear = -1;
    }

    /**
     * 判断队列是否已满
     *
     * @return
     */
    boolean isFull() {
        return this.rear == this.maxSize - 1;
    }

    /**
     * 判断队列是否为空
     *
     * @return
     */
    boolean isEmpty() {
        return this.rear == this.front;
    }

    /**
     * 向队列中添加数据
     */
    void addQueue(int param) {

        // 1、判断队列是否满
        if (isFull()) {
            System.out.println("队列已满，请等待。。。");
        }

        // 尾部向后移
        this.rear++;

        arrQueue[rear] = param;
    }

    /**
     * 从队列中获取数据
     */
    int popQueue() {
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }

        // 头部后移
        this.front++;

        return this.arrQueue[front];
    }

    /**
     * 获取队列所有数据
     */
    void showAllQueue() {

        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }

        for (int i = 0; i < arrQueue.length; i++) {

            System.out.println(arrQueue[i]);
        }

    }
}